﻿using System;
using System.Collections.Generic;
using Csharp数据结构01;

namespace Csharp_泛型列表
{
    class Program
    {
        //实现List的Indexof方法和LastIndexOf方法,用泛型

        //正序查找
        public static int IndexOf(List<Monster> list, Monster monster)
        {
            for (int i = 0; i < list.Count; i++)
            {
                if (list[i] == monster)
                {
                    return i;
                }
                              
            }
            return -1;
        }


        //倒叙查找
        public static int LastIndexOf(List<Monster> list, Monster monster)
        {
            for (int i = list.Count-1; i>=0; i--)
            {
                if (list[i] == monster)
                {
                    return i;
                }
            }
            return -1;
        }



        static void Main(string[] args)
        {
            #region 练习一
            //泛型集合
            //C#中集合是指在system.Collection.Generic下的类型，他们大多数是通过实现此命名空间下接口来实现的。
            //C#集合是来维护一组对象的数据结构，与数组不同，集合包含更多的功能。如:自动添加元素到指定位置，排序等。

            //泛型集合
            //在System.Collections.Generic下的泛型数据结构类
            //比System.Collections下object类型的数据结构类要更安全，性能更好

            //泛型类表
            //List<数据类型> 变量名 = new List<数据类型>();
            //List<数据类型> 变量名 = new List<数据类型>(初始长度);

            //属性：
            //count：代表这个列表实际包含多少元素
            //capacity: 代表这个列表可以包含多少个元素

            //Add:在列表末尾添加一个元素
            //Remove:删除指定的元素
            //RemoveAt：删除下标号指定的元素
            //Contains:检测是否包含这个元素

            //IndexOf：从头开始查找第一个匹配项的下标号，没找到返回-1
            //LastIndexOf:从尾开始查找第一个匹配的下标号，没找到返回-1；
            //Insert：在指定Index的位置，插入这个元素
            //Reverse：反转当前列表的排列顺序
            //Sort排序

            //查/改：索引器[下标号]



            //List<Monster> monsters = new List<Monster>();
            //for (int i=0;i<10;i++) 
            //{
            //    monsters.Add(new Monster("i"));
            //}

            //List<int> numList = new List<int>();
            ////添加
            //for (int i=10;i>=1;i--) 
            //{
            //    numList.Add(i);
            //}

            //numList.RemoveAt(4);

            //int temp = numList.Count;

            ////输出
            //for (int i=0;i<numList.Count;i++) 
            //{
            //    Console.WriteLine(numList[i]);
            //}

            #endregion

            #region 练习二

            //List<Monster> monsters = new List<Monster>();
            //Monster m1 = new Monster("尼罗河怪");
            //Monster m2 = new Monster("闪电尼罗河怪");
            //Monster m3 = new Monster("火焰尼罗河怪");
            //Monster m4 = new Monster("寒冰尼罗河怪");

            ////放入泛型列表中
            //monsters.Add(m1);
            //monsters.Add(m2);
            //monsters.Add(m3);
            //monsters.Add(m4);

            //int index = IndexOf(monsters, m3);
            //Console.WriteLine(index);

            ////foreach 展示
            //foreach (var item in monsters) 
            //{
            //    Console.WriteLine(item.name);
            //}
            #endregion


            //手动输入一组数列（可任意长度)，并对这个数列进行排序
            //每次提示用户输入:1，添加一个数字，2，排序并显永数列3.退出程序

            List<int> list = new List<int>();

            while (true) 
            {
                Console.WriteLine("1，添加一个数字，2，排序并显永数列3.退出程序");
                string input = Console.ReadLine();
                if (input == "1")
                {
                    Console.WriteLine("请输入一个数字");
                    //监听用户输入
                    int num = int.Parse(Console.ReadLine());
                    list.Add(num);
                }
                else if (input == "2")
                {
                    Console.Clear();//清屏
                    list.Sort();
                    foreach (var item in list)
                    {
                        Console.WriteLine(item);
                    }
                }
                else if (input == "3")
                {
                    break;
                }
                else 
                {
                    Console.WriteLine("输入错误，请输入正确选项");
                }


            }
        }
    }
}
